239. 滑动窗口最大值
239. 滑动窗口最大值
这是一道困难题,虽然我看了题解,但是我感觉没有这么困难
代码
func maxSlidingWindow(nums []int, k int) []int {
res := make([]int, 0, len(nums)-k+1)
deque := make([]int, 0, k)
for i := 0; i < len(nums); i++ {
for len(deque) > 0 && nums[deque[len(deque)-1]] < nums[i] {
// 将最后一个元素去掉
deque = deque[:len(deque)-1]
}
deque = append(deque, i)
if i - deque[0] >= k {
deque = deque[1:]
}
// fmt.Println(deque)
// 获取当前窗口结果
if i >= k-1 {
res = append(res, nums[deque[0]])
}
}
return res
}
chatgpt 聊天内容: https://chatgpt.com/c/672e2ed7-8a7c-8002-abe2-a8bc52af9e74
deque
维护了一个单调递减的双端队列,存储的是索引值。- 每次遍历时,先清理不在窗口范围内的元素,然后清除比当前值小的所有元素(保证队列从大到小)。
- 每当窗口达到大小
k
时,将队列的第一个元素(最大值)添加到结果数组中。
本站总访问量次 本站访客数人次 本文总阅读量次